package com.powernode;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* mybatis-plus代码生成器配置类
*/
public class MybatisPlusGenerator {

    private static final String URL = "jdbc:mysql://192.168.100.21:3306/mall?useSSL=false";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";
    //生成文件的输出地址
    private static final String OUT_DIR = "D://mybatis";
    private static final String TABLE_PREFIX = "ums_";

    public static void main(String[] args) {
        //根据数据库配置
        FastAutoGenerator.create(URL,USERNAME,PASSWORD)
                //全局配置
                .globalConfig((scanner,builder) -> {
                    //设置作者，日期类型只输出到天，输出地址为d://mybatis
                    builder.author("Juice").dateType(DateType.ONLY_DATE).outputDir(OUT_DIR);
                })
                //包配置
                .packageConfig((scanner,builder) -> {
                    //在提示后获取用户输入的包名，设置mapper.xml文件输出地址
                    builder.parent(scanner.apply("请输入包名：")).pathInfo(Collections.singletonMap(OutputFile.xml,OUT_DIR));
                })
                //策略配置
                .strategyConfig((scanner,builder) -> {
                    //获取提示后用户输入的表名
                    builder.addInclude(getTables(scanner.apply("请输入表名，多个使用英文逗号分隔，全部输入all")))
                            //设置表前缀，也是生成代码忽略的部分
                            .addTablePrefix(TABLE_PREFIX)
                            //service业务层配置生成的文件名格式以Service结尾
                            .serviceBuilder().formatServiceFileName("%sService")
                            //实体层使用Lombok注解
                            .entityBuilder().enableLombok()
                            //mapper.xml文件生成通用查询映射结果，通用查询结果列
                            .mapperBuilder().enableBaseResultMap().enableBaseColumnList()
                            .build();
                })
                //模板配置
                .templateConfig((scanner,builder) -> {
                    //不生成controller层
                    builder.disable(TemplateType.CONTROLLER).build();
                })
                //模板引擎配置
                .templateEngine(new FreemarkerTemplateEngine()).execute();
    }
    /**
    * 判断用户输入的是表名，还是all
    */
    protected static List<String> getTables(String tables) {
        return "all".equals(tables)? Collections.emptyList(): Arrays.asList(tables.split(","));

    }
}
